import { constantRoutes, routerMap } from '@/router'
import Layout from '@/views/layout/Layout'
import { getMenu } from '@/api/menu'

import permissionJson from './permissionJson'

function generateAsyncRouter(routerMap, serverRouterMap) {
  serverRouterMap.forEach(function (item, index) {
    item.component = routerMap[item.component]
    if (item.children && item.children.length > 0) {
      generateAsyncRouter(routerMap, item.children)
    }
  })
  return serverRouterMap;
}
/**
 * 通过meta.role判断是否与当前用户权限匹配
 * @param roles
 * @param route
 */
function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    return true
  }
}

// function getHomeRoutes(roles) {
//     var home = {
//         path: '/',
//         component: Layout,
//         redirect: '/homePage',
//         meta: {
//           title: '首页',
//           icon: ''
//         },
//         children: [
            
//         ]
//     }
//   return home;
// }
/**
 * 递归过滤异步路由表，返回符合用户角色权限的路由表
 * @param routes asyncRoutes
 * @param roles
 */
export function filterAsyncRoutes(routes, roles) {
  const res = []

  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      if (tmp.children) {
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      res.push(tmp)
    }
  })

  return res
}

const permission = {
  state: {
    routes: [],
    addRoutes: []
  },
  mutations: {
    SET_ROUTES: (state, routes) => {
      state.addRoutes = routes
      state.routes = constantRoutes.concat(routes)
    }
  },
  actions: {
    GenerateRoutes({ commit }, data) {
      return new Promise(resolve => {
        const { roles } = data
      //serverRouterMap().then(response => {
          let accessedRouters
          // let jsons = response.data.data;
          let jsons1 = permissionJson

          var asyncRouterMap = generateAsyncRouter(routerMap, jsons1)
          accessedRouters = filterAsyncRoutes(asyncRouterMap, roles)
          var res = accessedRouters.concat({ path: '*', redirect: '/404', hidden: true })
          // res.unshift(getHomeRoutes(roles))
          commit('SET_ROUTES', res)
          resolve(res)
        


        // getMenu().then(res => {
        //   var accessedRoutes
        //   // 生成异步路由表
        //   accessedRoutes = generateAsyncRouter(asyncRoutes, res.data)
        //   var result = accessedRoutes.concat({ path: '*', redirect: '/404', hidden: true })
        //   commit('SET_ROUTES', result)
        //   resolve(result)
        // })
         })
    }
  }
}

export default permission
